using System;
using Core.Base;
using Core.Contracts.Enums;
using Core.Contracts.Interfaces;
using Core.Extensions;
using Core.Features;
using Core.Resources;

namespace Core.Items.Robots
{
    
    public sealed class GrophoMk2: RobotBase
    {
        /// <summary>
        /// Create a new instance of the <see cref="T:Core.Items.Robots.GrophoMk2"/> class.
        /// </summary>
        public GrophoMk2()
            : base(
            "Gropho Mk2",
            Traduction.desc_gropho,
            FactionsEnum.Pelistal,
            RobotTechnologyLevel.Mk2,
            RobotSizesEnum.HeavyMech,
            new ISlot[]
                {
                    new Slot(0,SlotGroupsEnum.Chassis,SlotTypesEnum.Missile, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(1,SlotGroupsEnum.Chassis,SlotTypesEnum.Missile, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(2,SlotGroupsEnum.Chassis,SlotTypesEnum.Missile|SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(3,SlotGroupsEnum.Chassis,SlotTypesEnum.Missile|SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(4,SlotGroupsEnum.Chassis,SlotTypesEnum.Missile|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(5,SlotGroupsEnum.Chassis,SlotTypesEnum.Missile|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(6,SlotGroupsEnum.Chassis,SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules)
                },
            new IFeature<object>[]
                {
                    new AccumulatorCapacity<double>(3250),
                    new AccumulatorRechargeTime<double>(720),
                    new CpuPerformance<double>(380),
                    new ReactorPerformance<double>(1025),
                    new ArmorAmount<double>(3050),
                    new ChemicalResistance<double>(30),
                    new KineticResistance<double>(10),
                    new SeismicResistance<double>(45),
                    new ThermalResistance<double>(150),
                    new SurfaceHitSize<double>(10),
                    new InterferenceEmission<double>(6),
                    new InterferenceMinimum<double>(90),
                    new InterferencePeak<double>(405),
                    new InterferenceRadius<double>(300),
                    new LockingRange<double>(340),
                    new LockingTime<double>(12.50),
                    new MaximumTargets<double>(8),
                    new MissileGuidanceFailure<double>(0.1),
                    new SensorStrength<double>(85),
                    new SignalDetection<double>(80),
                    new SignalMasking<double>(80),
                    new ReloadingTime<double>(10),
                    new CargoCapacity<double>(12),
                    new RobotMass<double>(34980),
                    new SlopeCapacity<double>(45),
                    new TopSpeed<double>(39.60),
                    new Volume<double>(22.50),
                    new DemobilizerResistance<double>(0),
                    new CriticalHitChance<double>(0)
                },
            new IBonusModifier[]
                {
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.LockingTime, -0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Locking time"}, 
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumMissileDamage, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Medium missile damage"}, 
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.ShieldAbsorptionRatio, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Shield absorption"}, 

                    new BonusModifier<PelistalRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.MediumMissileDamage, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Medium missile damage"}, 
                    new BonusModifier<PelistalRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.SmallMissileDamage, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "small missile damage"}, 
                },
            new ICondition<IExtension>[]
                {
                    new ExtensionCondition<PelistalRobotControl>(10), 
                    new ExtensionCondition<AdvancedRobotics>(4)
                })
        {
        }
        
    }
}